E-papper sköld på pcDuino (2 / 6 steg)
Steg 2: kod
#include "core.h"//pcDuino innehåller Core header-fil
#include "ls.h"//Containing bilder som ska visas
#define STATUS_PIN 9 / / definiera elektroniskt papper staten pin
#define CS_PIN 10 / / definiera elektroniskt papper chip Välj pin
#define MISO_PIN 11 / / Master input och slav utgångsstiftet
#define MOSI_PIN 12 / / Master output och slav ingångsstift
#define SCK_PIN 13 / / definierats klocka pin
#define FRAME_END_LEN 11 / / definiera uppdatera frekvens (jag använde 11, det är gratis att ändra)
unsigned char SoftSpiTransfer (unsigned char data) //Simulating SPI timing
{
unsigned char cnt;
unsigned char rst;
rst = 0;
för (cnt = 0; cnt < 8; cnt ++)
{
första << = 1;
om (data & 0 × 80)
digitalWrite(MOSI_PIN,HIGH);
annat
digitalWrite(MOSI_PIN,LOW);
digitalWrite(SCK_PIN,HIGH);
digitalWrite(SCK_PIN,LOW);
rst | = digitalRead(MISO_PIN);
data << = 1;
}
returnera rst;
}
void ClearScring (void) //Clear funktion
{
bool DeviceStatus; //Defined en mängd statliga
DeviceStatus = digitalRead(STATUS_PIN);
digitalWrite(CS_PIN,LOW);
SoftSpiTransfer(3);
While(digitalRead(STATUS_PIN) == DeviceStatus)
{
ASM ("nop"), //Embedded en försening assembler instruktioner, samma nedan
}
digitalWrite(CS_PIN,HIGH);
}
void SetImageWide (unsigned int brett) //Image bredd sättande funktion
{
bool DeviceStatus;
DeviceStatus = digitalRead(STATUS_PIN);
digitalWrite(CS_PIN,LOW);
SoftSpiTransfer(1);
While(digitalRead(STATUS_PIN) == DeviceStatus)
{
ASM("NOP");
}
DeviceStatus =! DeviceStatus;
SoftSpiTransfer (wide >> 8);
While(digitalRead(STATUS_PIN) == DeviceStatus)
{
ASM("NOP");
}
DeviceStatus =! DeviceStatus;
SoftSpiTransfer (wide & 0xff);
While(digitalRead(STATUS_PIN) == DeviceStatus)
{
ASM("NOP");
}
digitalWrite(CS_PIN,HIGH);
}
void SetImageHigh (unsigned int hög) //Image höjd sättande funktion
{
bool DeviceStatus;
DeviceStatus = digitalRead(STATUS_PIN);
digitalWrite(CS_PIN,LOW);
SoftSpiTransfer(2);
While(digitalRead(STATUS_PIN) == DeviceStatus)
{
ASM("NOP");
}
DeviceStatus =! DeviceStatus;
SoftSpiTransfer (high >> 8);
While(digitalRead(STATUS_PIN) == DeviceStatus)
{
ASM("NOP");
}
DeviceStatus =! DeviceStatus;
SoftSpiTransfer (hög & 0xff);
While(digitalRead(STATUS_PIN) == DeviceStatus)
{
ASM("NOP");
}
digitalWrite(CS_PIN,HIGH);
}
void SendImage (const unsigned char * pic) //Function visar bilder
{
bool DeviceStatus;
unsigned char data.
unsigned char cnt0;
unsigned int cnt1;
osignerad länge;
DeviceStatus = digitalRead(STATUS_PIN);
digitalWrite(CS_PIN,LOW);
SoftSpiTransfer(4);
While(digitalRead(STATUS_PIN) == DeviceStatus)
{
ASM("NOP");
}
DeviceStatus =! DeviceStatus;
för (cnt0 = 0; cnt0 < FRAME_END_LEN; cnt0 ++)
{
Serial.println ("ny rad");
för (cnt1 = 0; cnt1 < 120000; cnt1 ++)
{
data = gImage [cnt1];
SoftSpiTransfer(data);
tid = 0;
While(digitalRead(STATUS_PIN) == DeviceStatus)
{
ASM("NOP");
tid ++;
IF(Time > 1000000)
{
Serial.println ("fel"); //When timeout seriell prompt ett fel
digitalWrite(CS_PIN,HIGH);
hemkomst.
}
}
DeviceStatus =! DeviceStatus;
}
}
digitalWrite(CS_PIN,HIGH);
}
void setup()
{
Serial.BEGIN(9600);
pinMode (STATUS_PIN, indata);
pinMode (CS_PIN, OUTPUT);
pinMode (MOSI_PIN, OUTPUT);
pinMode (MISO_PIN, indata);
pinMode (SCK_PIN, OUTPUT);
digitalWrite(CS_PIN,HIGH);
digitalWrite(STATUS_PIN,HIGH);
digitalWrite(SCK_PIN,LOW);
}
void loop()
{
char cmd;
IF(Serial.available()) //If seriell port fick en data
{
CMD = Serial.parseInt();
Switch(CMD)
{
fall 1:
SetImageWide(600);
Serial.println ("Set bild bred komplett!");
bryta;
fall 2:
SetImageHigh(800);
Serial.println ("Ange bild hög slutföra!");
bryta;
fall 3:
Serial.println ("Start klart Scring!");
ClearScring();
Serial.println ("klara Scring komplett!");
bryta;
fall 4:
Serial.println ("Start skicka bilddata!");
SendImage(gImage);
Serial.println ("Skicka bilddata komplett!");
bryta;
standard:
Serial.println ("Unknow instruktion!");
bryta;
}
}
}